// Timer顾名思义，就是定时器的意思，可以实现一些定时操作，内部也是通过channel来实现的。
package main

import (
	"fmt"
	"time"
)

func main() {
	timer1 := time.NewTimer(time.Second * 2)
	t1 := time.Now()
	fmt.Printf("t1:%v\n", t1)

	t2 := <-timer1.C //阻塞的，指定时间到了在执行,C返回值是 chan Time
	fmt.Printf("t2:%v\n", t2)

	//如果只是想单纯的等待，可以使用time.Sleep
	timer2 := time.NewTimer(time.Second * 2)
	<-timer2.C
	fmt.Println("等待2s后")

	time.Sleep(time.Second * 2)
	fmt.Println("再一次等待2s后")

	<-time.After(time.Second * 2) //time.After函数的返回值是 chan Time
	fmt.Println("再再一次等待2s后")

	timer3 := time.NewTimer(time.Second)
	go func() {
		<-timer3.C
		fmt.Println("Timer3 expired")
	}()
	stop := timer3.Stop() //停止定时器
	//阻止timer事件发生，当该函数执行后，timer计时器停止，相应的事件不在执行
	if stop {
		fmt.Println("timer 3 stop")
	}

	fmt.Println("before")
	timer4 := time.NewTimer(time.Second * 5) //原来设置5s
	timer4.Reset(time.Second)                //重新设置时间
	<-timer4.C
	fmt.Println("after")
}
